package cn.xiaosiyuan.util.dataStructure.list;

import cn.xiaosiyuan.util.interfaces.IList;

import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;

public class ListUtil implements IList {

    /*
    业务场景：
    把从 数据库里面查出来的 List<Map<String, Object>> 转换为 List<Map<String, String>>

    2 英语是 two 谐音是 to，可以看做是 convert to 的简写
     */
    public List<Map<String, String>> object2String(List<Map<String, Object>> list){
        List<Map<String, String>> resultList = new ArrayList<>();
        for (Map<String, Object> map : list) {
            Map<String, String> resultMap = new HashMap<>();
            for (Map.Entry<String, Object> entry : map.entrySet()) {
                resultMap.put(entry.getKey(), (entry.getValue() == null ) ? "": entry.getValue().toString());
            }
            resultList.add(resultMap);
        }
        return resultList;
    }

    /**
     * 分页器
     * @param source 所有数据（数据源）
     * @param pageSize 页面大小
     * @param pageNumber 页码，从1开始
     * @return 当前页面数据
     */
    public List pagination(List source, Integer pageSize, Integer pageNumber) {
        // 参数合法性校验
        if (pageSize < 0) throw new IllegalArgumentException("pageSize 不能是负数");
        if (pageNumber < 0) throw new IllegalArgumentException("pageNumber 不能是负数");
        if (source.size() <= 0) return null;



        Integer fromIndex = 0, endIndex = 0;
        fromIndex = pageSize * (pageNumber - 1);
        endIndex = pageSize * pageNumber;

        // fromIndex 如果超出了size 会报错，所以做一层判断
        fromIndex = (fromIndex > source.size()) ? source.size() : fromIndex;

        // endIndex 如果超出了size 会报错，所以做一层判断

        endIndex = (endIndex > source.size()) ? source.size() : endIndex;

        return source.subList(fromIndex, endIndex);
    }

}
